package abstract_factory

import "fmt"

type Product interface {
	Print()
}

type productA struct {
}

func (p *productA) Print() {
	fmt.Println("product A...")
}

type productB struct {
}

func (p *productB) Print() {
	fmt.Println("product B...")
}

type Factory interface {
	GetProductA() Product
	GetProductB() Product
}

type ConcreteFactory struct {
}

func (sf ConcreteFactory) GetProductA() Product {
	return &productA{}
}

func (sf ConcreteFactory) GetProductB() Product {
	return &productB{}
}
